import {
	decryptData,
	encryptData
} from './encrypt'
import {
	convertLowerUnderlineRecursion,
	convertLowerCamelRecursion
} from './str-util.js'
import {
	getMpEnvSync
} from './common'

let baseUrl = 'https://pay.zzzfj.com'
let isEncrypt = true
let urlObj = {
	// dev: 'https://pay.zzzfj.com',
	// 佳堃
	dev: 'http://192.168.110.90:57002',
	// 森保
	// dev: 'http://192.168.110.24:57002',
	// 高峰亭
	// dev: 'http://192.168.110.22:57002',
	// 林祖宇
	// dev: 'http://192.168.110.19:57002',
	// 泰圣
	// dev: 'http://192.168.110.63:57002',
	// 泽平
	// dev: 'http://192.168.110.5:57002',
	// 龙威
	// dev: 'http://192.168.110.64:57002',
	// dev: 'http://172.17.40.202:57002', //内网生产测试
	trial: 'https://pay.zzzfj.com', //体验版
	release: 'https://pay.zzzfj.com', //正式版
}
// 小程序设置接口路径
const mpSetUrl = (env) => {
	if (env === 'develop') {
		console.log('当前是开发版');
		isEncrypt = false
		baseUrl = urlObj.dev
	} else if (env === 'trial') {
		console.log('当前是体验版');
		baseUrl = urlObj.trial
	} else if (env === 'release') {
		console.log('当前是正式版');
		baseUrl = urlObj.release
	} else {
		console.log('当前环境未知');
	}
}
// #ifdef H5
if (process.env.NODE_ENV === 'development') {
	console.log('开发环境');
	isEncrypt = false
	baseUrl = urlObj.dev
} else {
	console.log('生产环境');
	baseUrl = urlObj.release //公网生产测试
}
// #endif
// #ifdef MP-WEIXIN || MP-ALIPAY
const env = getMpEnvSync();
mpSetUrl(env)
console.log('请求路径==>', baseUrl);
// #endif

const request = (options) => {
	// 请求拦截器：可以在这里统一设置请求头、处理请求数据等
	options.header = {
		...options.header,
		'Content-Type': 'application/json', // 示例：统一设置请求头
		// 'Authorization': 'Bearer ' + uni.getStorageSync('token') // 示例：从本地存储中获取token并设置
		'User_Type': '5',
		'Oper_Device_Type': '1',
		'Oper_Type': '1',
	}

	//请求拦截器，驼峰转下划线
	options.data = convertLowerUnderlineRecursion(options.data)
	//请求拦截器，数据加密处理
	options.data = {
		data: isEncrypt ? encryptData(options.data) : options.data
	}

	let url = ''
	if (options.url.indexOf('http') == 0) {
		url = options.url
	} else {
		url = baseUrl + options.url
	}

	// 统一显示加载框
	uni.showLoading({
		title: '加载中...',
		mask: true
	})

	return new Promise((resolve, reject) => {
		uni.request({
			...options,
			url,
			success: (res) => {
				// 响应拦截器：可以根据返回的状态码做不同的处理
				if (res.data.code === 200) {
					const resData = isEncrypt ? JSON.parse(decryptData(res.data
						.data)) : res.data.data
					console.log('res', resData);
					const data = convertLowerCamelRecursion(resData);
					res.data.data = data
					resolve(res.data)
				} else {
					// 错误处理
					console.error('请求失败', res)
					uni.showModal({
						content: res.data.msg,
						showCancel: false
					})
					resolve(res)
				}
			},
			fail: (err) => {
				// 请求失败时的处理
				console.error('请求错误', err)
				reject(err)
			},
			complete: () => {
				// 隐藏加载框
				uni.hideLoading()
			}
		})
	})
}

// 导出默认配置或其他可能需要的配置
export default request